/**
 * @Title: PushRiskTask.java
 * @Package com.gomeplus.insurancec.step.impl
 * @Description: 推送评测测评定时任务
 * @author xinpeilin
 * @date 2017年7月28日 上午12:06:18
 * @company cn.com.gome
 * @version V1.0
 */


package cn.com.klun.tjy.step.impl;

import cn.com.klun.inter.ILogics;
import cn.com.klun.inter.ITask;
import cn.com.klun.inter.SpartITask;
import cn.com.klun.tjy.common.constant.ResultEnum;
import cn.com.klun.tjy.common.util.DateUtils;
import cn.com.klun.tjy.common.util.TaskConstants;
import cn.com.klun.tjy.dao.entity.TblStockDaykInfo;
import cn.com.klun.tjy.dao.mapper.ser.TblStockDaykInfoSerMapper;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @author xinpeilin
 * @ClassName: PushRiskTask
 * @Description: 推送评测测评定时任务
 * @date 2017年7月28日 上午12:06:18
 */
@Service
public class PushRiskTask implements ITask<TblStockDaykInfo>, SpartITask<TblStockDaykInfo> {

    private Logger logger = LoggerFactory.getLogger("PushRiskTask");

    @Resource
    private TblStockDaykInfoSerMapper tblStockDaykInfoSerMapper;

    @Resource
    private ILogics<Map<String, Object>> dayKUpdateLockLogic;

    @Resource
    private ILogics<Map<String, Object>> dayKUpdateLogic;

    @Resource
    private ILogics<Map<String, Object>> dayKUpdateUnlockLogic;

    @Override
    public List<TblStockDaykInfo> queryTaskInfo(JSONObject config) {
        logger.info("更新日K定时任务--查询查询需要更新数据开始");
        try {
            String rownum = "100";
            Map<String, String> map = new HashMap<String, String>();
            map.put("rownum", rownum);
            map.put("lockFlag", TaskConstants.LOCK_FLG_NO); // 未锁定状态的的信息
            map.put("sysDate",DateUtils.getCurrDate()); // 取出最大日期不等于今天的日期
            List<TblStockDaykInfo> list = tblStockDaykInfoSerMapper.queryNeedUpdateStock(map);
            if (list != null && list.size() > 0) {
                return list;
            }
            logger.info("更新日K定时任务list条数：{}", list==null?"0":list.size());
        } catch (Exception e) {
            logger.error("更新日K定时任务异常!", e);
        }
        return null;
    }

    @Override
    public void runTask(TblStockDaykInfo t) {
        Map<String, Object> map = new HashMap<String, Object>();
        String _LOG_AND_KEY = t.getStoId() + "_" + DateUtils.getCurrDateTime();
        map.put("_LOG_AND_KEY", _LOG_AND_KEY);
        map.put("isUnlock", "error");
        map.put("processFlag", "false");
        map.put("tblStockDaykInfo", t);
        logger.info("更新日K定时任务执行开始,日志关联key:{},userId:{}", _LOG_AND_KEY, t.getStoId());
        try {
            // 任务锁定
            if (!ResultEnum.OK.equals(dayKUpdateLockLogic.exec(map))) {
                return;
            }
            map.put("isUnlock", "true");
            // 业务逻辑处理类
            if (!ResultEnum.OK.equals(dayKUpdateLogic.exec(map))) {
                return;
            }
            map.put("processFlag", "true");
        } catch (Exception e) {
            logger.error("更新日K定时任务异常,日志关联key:{}" + _LOG_AND_KEY, e);
        } finally {
            // 任务解锁
            try {
                if ("true".equals(map.get("isUnlock").toString())) {
                    dayKUpdateUnlockLogic.exec(map);
                }
            } catch (Exception e) {
                logger.error("更新日K定时任务解锁任务，执行异常,日志关联key:{}", _LOG_AND_KEY, e);
            }
            logger.info("推送评测测评定时任务解锁任务执行结束,日志关联key:{},userId:{}", _LOG_AND_KEY, t.getStoId());
        }
    }

    @Override
    public boolean editTaskInfo(List<TblStockDaykInfo> list) {
        return false;
    }

    @Override
    public boolean spart(TblStockDaykInfo tblPushRiskInfo, JSONObject config) {
        return true;
    }
}
